home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 54 / Tiger_Disk_054_1998-09_Tiger-Crew-Disk_de_Side_B.d64 / befehle.sda / 6502-ERGAENZUNG < prev    next >
Text File  |  2023-02-26  |  5KB  |  106 lines

  1. ADRESSIERUNGSARTEN
  2.  
  3. PROZESSOR 6502 / 6510: 56 BEFEHLE, 13 ADRESSIERUNGSARTEN
  4.  
  5. IMM.: IMMEDIATE (UNMITTELBAR): OPERAND = BEFEHLSBYTE;  Z.B. LDA #$01
  6. ABS.: ABSOLUTE  (DIREKT): ANGABE DER 2-BYTE-ADRESSE DES OPERANDEN;  Z.B.: LDA $F
  7. E00
  8. Z:    ZEROPAGE (ABSOLUTE 1-BYTE-ADRESSE); 1-BYTE-ADRESSE ZEIGT AUF OPERAND IN ZE
  9. ROPAGE; Z.B. LDA $FE
  10. IND.: INDIRECT; ANGEGEBENE ADRESSE ZEIGT AUF ADRESSE DES OPERANDEN; NUR: JMP; Z.
  11. B. JMP ($FFFC)
  12. A:    ACCUMULATOR; BEFEHL WIRKT AUF AKKU; Z.B. ASL A BZW. NUR ASL
  13. IMP.: IMPLIED (IMPLIZIERT); BEFEHL ENTHAELT ADRESSIERUNG; ZB. CLD
  14. REL.: RELATIVE; ZUM MOMENTANEN STAND DES PROGRAMCOUNTERS WIRD DIE SPRUNGWEITE IM
  15.  BEREICH -128..+127 IM ZWEIERKOMPLEMENT
  16.       ALSO $80(=-128)..$FF(=-1)..$01(=+1)..$7F(=+127) ANGEGEBEN; IM ASSEMBLER WI
  17. RD ABER DIREKT DAS ZIEL ANGEGEBEN:
  18.       Z.B: BNE $2013 OD. BNE LOOP
  19. Z,X:  INDEXED, X ADRESSING; Z.B. LDA $AB,X: LAEDT AKKU MIT BYTE DER ADRESSE $AB+
  20. X
  21. Z,Y:  INDEXED, Y ADRESSING
  22. ABS,X INDEXED, X ADRESSING; Z.B. LDA $1800,X
  23. ABS,Y INDEXED, Y ADRESSING
  24. (IND,X): INDEXED INDIRECT, X ADRESSING; IND STELLT STETS EINE ZEROPAGEADRESSE DA
  25. R.
  26.       BEFEHLSADRESSE STEHT IN DEN ZELLEN IND+X (LOW-BYTE) / IND+X+1 (HI-BYTE)
  27. (IND),Y: INDIRECT INDEXED, Y ADRESSING; IND STELLT ZEROPAGE-ADRESSE DAR.
  28.       BEFEHLSADRESSE: ZELLEN IND/IND+1 AUSLESEN UND ZU DIESER ADRESSE Y ADDIEREN
  29.       BEISPIELE: INHALT DER ZELLEN: X=$04 Y=$05 $23=0 $24=$18 $27=$00 $28=$91
  30.       LDA ($23,X): HOLT BYTE AUS $9100 IN DEN AKKU
  31.       LDA ($23),Y: HOLT BYTE AUS $1805 IN DEN AKKU
  32.  
  33. RECHNEN:
  34.  
  35. ADC UND SBC: OVERFLOW-FLAG V WIRD GESETZT WENN:
  36.    A) UEBERTRAG VON BIT 6 AUF BIT 7 OHNE AEUSSEREN UEBERTRAG (CARRY)
  37.    B) AEUSSERER UEBERTRAG BIT 7 INS CARRY-BIT OHNE UEBERTRAG BIT 6 AUF 7
  38. ADC: ZUM AKKU WIRD ARGUMENT PLUS CARRY ADDIERT
  39. SBC: A = A MINUS ARGUMENT MINUS INVERTIERTES CARRY-BIT ("BORROW"). WIE BEIM HAND
  40. SCHRIFTLICHEN RECHNEN WIRD BEIM
  41. ERGEBNIS C=0, WENN EIN "BORROW"-UEBERTRAG AUF DIE NAECHSTE STELLE AUFTRITT.
  42. DEZIMALFLAG: MIT SED WIRD DEZIMALMODUS EINGESCHALTET: RECHNEN MIT BCD-CODES (DEZ
  43. . 00..99 ENTSPRICHT HEX. 00..99)
  44. WIRKT AUF ADC UND SBC.  DABEI IST BEI ADC DIE ZERO-FLAG UNGUELTIG!
  45.  
  46. BEFEHL: SBC #$66  (CMP-BEFEHL: SELBE WIRKUNG AUF N,Z,C WIE SBC MIT C=1)
  47. VORHER:  A=65  C=1    NACHHER:  A=FF  C=0  N=1   ("BORROW" ERFOLGT: C GELOESCHT)
  48.          A=66  C=1              A=00  C=1  Z=1
  49.          A=67  C=1              A=01  C=1
  50.          A=65  C=0              A=FE  C=0  N=1   ("BORROW" WIRD ABGEZOGEN)
  51.          A=66  C=0              A=FF  C=0  N=1
  52.          A=67  C=0              A=00  C=1  Z=1
  53.  
  54. VERSCHIEDENES
  55.  
  56. FLAGREGISTER: FLAGS: N V 1 B D I Z C
  57. VEKTOREN:  IRQ (UND BRK): FFFE/FFFF;  RESET: FFFC/FFFD;  NMI: FFFA/FFFB
  58.  
  59. STACKPOINTER S: BEIM ABLEGEN VON DATEN AUF DEN STACK ($100-$1FF) WIRD VON OBEN (
  60. $1FF) NACH UNTEN GESTAPELT
  61. UND S DEKREMENTIERT; S ZEIGT AUF EINEN FREIEN PLATZ.
  62.  
  63. JSR: PROGRAMMZAEHLER WIRD AUF STACK GELEGT: ERST PCH, DANN PCL. DABEI ZEIGT PC A
  64. UF DAS LETZTE DER 3 BEFEHLSBYTES.
  65. RTS: DER PROGRAMMZAEHLER WIRD VOM STACK GEHOLT UND UM 1 ERHOEHT (DAMIT ZEIGT ER 
  66. AUFS ERSTE BYTE DES FOLGEBEFEHLS)
  67.  
  68. INTERRUPTS: AKTUELLER BEFEHL WIRD (INCLUSIVE ALLER OPERATIONSTEILE) BEENDET; DAN
  69. N WIRD PCH, PCL UND P AUF STACK
  70. GEGEBEN (P: FLAGREGISTER). ANDERE REGISTER WERDEN NICHT AUTOMATISCH GERETTET.
  71. DIE INTERRUPTFLAG IST IM AKTUELLEN P GESETZT, NICHT IN P AUF DEM STACK. BEI DER 
  72. BREAK-FLAG IST ES UMGEKEHRT.
  73.  
  74. VORSCHLAG FUER INTERRUPTPRG.: PHA TXA PHA TYA PHA .... PLA TAY PLA TAX PLA RTI.
  75. NACH RTI WIRD DAS PROGRAMM NACH IRQ BZW. NMI PROBLEMLOS FORTGESETZT, NICHT JEDOC
  76. H NACH DEM SOFTWAREINTERRUPT BRK:
  77. DER PROGRAMMZAEHLER MUSS UM 1 VERMINDERT WERDEN!
  78. UNTERSCHEIDUNG ZWISCHEN BRK UND IRQ (SELBER HARDWAREVEKTOR!): S. KERNAL AB $FF48
  79. :
  80. PHA  TXA  PHA  TYA  PHA  TSX (STACKPOINTER LESEN)  LDA $0104,X (FLAGREGISTER IM 
  81. STACK LESEN)  AND #$10
  82. BEQ $FF58 (BREAK-FLAG NICHT GESETZT) FF55: JMP ($0316) (BREAK-ROUTINE)   FF58: J
  83. MP ($0314) (IRQ-ROUTINE).
  84. BEISPIEL: BRK-BEFEHL AN DER STELLE $9112, ANWENDUNG OBIGER ROUTINE ZUM RETTEN DE
  85. R REGISTER: IM STACK STEHT VON OBEN
  86. NACH UNTEN: $91 $14 P A X Y  (P: B=1). NACH RTI WIRD AN $9114 STATT AN $9113 WEI
  87. TERGEMACHT!
  88.  
  89. PROZESSORFEHLER: BEI INDIREKTEM JUMP MIT $FF ALS LOWBYTE DER ADRESSE GIBT ES EIN
  90. EN FEHLER: Z.B.: JMP ($18FF); SPRUNGADRESSE WIRD NICHT IN $18FF/$1900 SONDERN IN
  91.  $18FF/$1800 GEHOLT.
  92. TESTEN: MIT SMON RAM ZWISCHEN $1000 UND $3000 MIT 00 FUELLEN (BRK!), DANN "A 200
  93. 0" "JMP ($18FF)"
  94. MIT "M"-BEFEHL $80 IN $1800, $90 IN $1900 GEBEN; DANN "G 2000" EINGEBEN.
  95. SMON MELDET SICH WIEDER MIT PC=$8001 STATT $9001!
  96.  
  97. SOFTWARE(IN)KOMPATIBILITAET:
  98. DER 6510 ENTHAELT EINEN E/A-PORT IN DEN ADRESSEN 0 UND 1. DIESE SIND SOMIT NICHT
  99.  ALS "NORMALE" ZELLEN VERWENDBAR.
  100. DER 6502 HAT EINEN HARDWAREEINGANG ZUM SETZEN DES "V"-FLAGS, WAS Z.B. IN DER FLO
  101. PPY 1541 AUSGENUTZT WIRD.
  102. DER 65SC02 (C-MOS-VARIANTE) HAT EINEN ERWEITERTEN BEFEHLSSATZ. ALLE "ILLEGALEN" 
  103. BEFEHLE SIND ENTFERNT WORDEN.
  104. DER 65(S)C816 (16 BIT) IST AUFWAERTSKOMPATIBEL ZUM 6510 (6/8 PORTBITS); "ILLEGAL
  105. E" BEFEHLE SIND ERSETZT WORDEN.
  106.